/*! 
 * Ball (GameObject sample).
 *
 * \author Devis Rossini
 * \date 02 April 2012
 */
#ifndef PHXOGREBALL_H_INCLUDE_GUARD
#define PHXOGREBALL_H_INCLUDE_GUARD

#include "GameObject.h"

namespace GameObjects
{
	/*!
     * Ball class.
     */
	class Ball : public GameObject
	{
	public:

		/*!
         * Constructor.
		 *
		 * \note Creates the whole entity (physical and graphical).
         */
		Ball(phx::Scene* iScene, Ogre::SceneManager* iSceneManager, Ogre::SceneNode* iParentNode, 
			const Ogre::Vector3& iBallPosition, const Ogre::Quaternion& iBallOrientation, const float iBallRadius, const float iBallMass);

		/*!
         * Destructor.
         */
		virtual ~Ball() { }

		/*!
         * Update the object.
         */
		virtual void Update(const float iDuration);

	protected:

		/*!
         * Create and initialize the physical entity associated to the object.
         */
		phx::CollisionPrimitive* CreatePhxEntity(phx::Scene* iScene, const phx::Vector3& iBallPosition, const phx::Quaternion& iBallOrientation, 
			const phx::real iPokeBallRadius, const phx::real iPokeBallMass);

		/*!
         * Create the Ogre's entity associated to the object and insert it into the scenegraph.
         */
		Ogre::SceneNode* CreateOgreEntity(Ogre::SceneManager* iSceneManager, Ogre::SceneNode* iParentNode, 
			const Ogre::Vector3& iBallPosition, const Ogre::Quaternion& iBallOrientation, const float iBallRadius, const float iBallMass);
	};
}

#endif // PHXOGREBALL_H_INCLUDE_GUARD